iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
自我挑戰組

30天從0開始的NCPC之旅系列 第 3

[Day 03] UVA272&UVA11321 & UVA10035

  • 分享至 

  • xImage
  •  

UVA272

點我進UVA272

我的解題思路

由於此題較為簡單,不再特別贅述

#include <iostream>

using namespace std;

int main(){
	string s;
	int num=0;
	while(getline(cin,s)){
		for(int i=0;i<s.length();i++){
			if(s[i]!='"') cout<<s[i];
			else if (!(num%2)) {
				cout<<"``";
				num++;
			}
			else {
				cout<<"''";
				num++;
			}
		}
		cout<<endl;
	
	}

}

UVA11321

點我進UVA11321

C++的sort函數簡單用法

  1. array數值由小到大排列:排序 arry 陣列,需指定排序的起始與結束範圍, 如sort(arr, arr + 6);
  2. (常用)自訂array排序:很多題目都不是單單只有由小到大排列,常常需要自己另寫一個函數結合Sort
    去做排序,如想讓array數值由大到小排列:

在主程式外,自訂一個比較函數compare

bool compare(int a, int b) {
  return a > b;
}

主程式內:

sort(arr, arr + 6, compare);

參考延伸閱讀:https://officeguide.cc/cpp-sort-function-tutorial-examples/

我的解題思路

題目要求:

  1. Mod M的數值越小則排在越前面
  2. 若兩餘數一樣(一奇一偶),則奇數排在偶數前
  3. 若兩餘數一樣(一兩奇),則數值大在前
  4. 若兩餘數一樣(一兩偶),則數值小在前

關於此題目的小提醒:

  1. 要注意input會有負數的問題
  2. 排序有點麻煩,先抓兩餘數不一樣的來做討論

特別聲明:

由於此題我在寫的時候有點卡住,因此我有在瘋狂程設找一些大神寫的程式碼做為參考!

#include<bits/stdc++.h>
using namespace std;

int a[10000],N,M;

bool comp(int x,int y){ 
 if(x%M!=y%M)return x%M<y%M;//因為Mod M的數值越小會排在越前面
 if(abs(x%2)!=abs(y%2))return x%2;//代表一奇一偶。因為數值有負數所以要用絕對值來看 
 if(x%2)return x>y;//若兩個都為奇數則數值大的奇數在前 
 return x<y; 
}
int main(){
 
 while(cin>>N>>M){
  cout<<N<<" "<<M<<endl;
  
  for(int i=0;i<N;i++){ 
   cin>>a[i];
  } 
  
  sort(a,a+N,comp);
  
  for(int i=0;i<N;i++){
   cout<<a[i]<<endl;
   }
   if(N==0&&M==0){
   break;
   }
 }
}

UVA10035

點我進UVA10035

我的解題思路

  1. 將基礎變數設好
  2. cin題目要求的輸出行數再cin問卷的測試結果
  3. 利用for迴圈和string長度進行總分運算
  4. 當是O時num為答對題目的分數,因為會累加所以num++在加至score表示當前總分
    為X時num會重新歸0
  5. 最後cout結果
  6. n--進入下一次計算,並初始化score和num
#include<iostream>
#include<string>
using namespace std;

int main() {
 int a, b, carry = 0, len, bit = 0;
 string str_a, str_b;
 while (cin >> a >> b) {
  if (!(a || b)) break;

  str_a = to_string(a);
  str_b = to_string(b);

  if (str_a.length() > str_b.length()) len = str_a.length();
  else len = str_b.length();

  for (int i = len; i > 0; i--) {
   if (bit) {
    if ((a % 10 + b % 10) + 1 > 9) {
     carry++;
     bit = 1;
    }
    else bit = 0;
   }
   else {
    if ((a % 10 + b % 10) > 9) {
     carry++;
     bit = 1;
    }
   }
   a /= 10;
   b /= 10;
  }
  if (carry == 0) cout << "No carry operation." << endl;
  else if (carry == 1) cout << carry << " carry operation." << endl;
  else cout << carry << " carry operations." << endl;
  carry = 0; len = 0; bit = 0;
 }
}

上一篇
[Day 02] UVA100 & UVA 12019 +額外追加練習
下一篇
[Day 04] UVA10252 &UVA10041 & UVA490
系列文
30天從0開始的NCPC之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言